Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home

Optimiza las consultas utilizando índices

En esta página, puedes ver ejemplos de código copiables que muestran cómo administrar diferentes tipos de índices utilizando el driver C.

Tip

Para obtener más información sobre el trabajo con índices, consulte el índice guide. Para obtener más información sobre cualquiera de los índices mostrados en esta página, consulta el enlace proporcionado en cada sección.

Para utilizar un ejemplo de esta página, copie el ejemplo de código en el aplicación de muestra o su propia aplicación. Asegúrese de reemplazar todos los marcadores de posición en los ejemplos de código, como <connection string URI>, con los valores relevantes para tu implementación de MongoDB.

Puede utilizar la siguiente aplicación de muestra para probar los ejemplos de código en esta página. Para usar la aplicación de muestra, siga los siguientes pasos:

  1. Asegúrate de tener instalado el controlador C.

  2. Copia el siguiente código y pégalo en un nuevo archivo .c.

  3. Copia un ejemplo de código de esta página y pégalo en las líneas especificadas del archivo.

1#include <bson/bson.h>
2#include <mongoc/mongoc.h>
3#include <stdio.h>
4
5int
6main(void)
7{
8 bson_error_t error;
9
10 mongoc_init();
11
12 mongoc_client_t *client = mongoc_client_new("<connection string URI>");
13 mongoc_collection_t *collection = mongoc_client_get_collection(client, "<database name>", "collection name");
14
15 // Start example code here
16
17 // End example code here
18
19 mongoc_collection_destroy(collection);
20 mongoc_client_destroy(client);
21 mongoc_cleanup();
22
23 return EXIT_SUCCESS;
24}

El siguiente ejemplo crea un índice ascendente en el campo especificado:

bson_t *keys = BCON_NEW("<field name>", BCON_INT32(1));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

Para obtener más información sobre los índices de campo único, consulta la guía de Índices de campo único.

El siguiente ejemplo crea un índice compuesto de dos índices ascendentes en los campos especificados:

bson_t *keys = BCON_NEW("<field name 1>", BCON_INT32(1), "<field name 2>", BCON_INT32(1));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

Para aprender más sobre índices compuestos, consulta la guía de Índices compuestos.

El siguiente ejemplo crea un índice multiclave ascendente en el campo especificado que tiene valores de tipo arreglo:

bson_t *keys = BCON_NEW("<array field name>", BCON_INT32(1));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

Para obtener más información sobre los índices multiclave, consulta la guía de índices multiclave.

El siguiente ejemplo crea un 2índice dsphere en el campo especificado que contiene objetos GeoJSON:

bson_t *keys = BCON_NEW("<GeoJSON object field name>", BCON_UTF8("2dsphere"));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

Para obtener más información sobre el tipo de datos GeoJSON, consulte Objetos GeoJSON en el manual del Servidor de MongoDB.

El siguiente ejemplo crea un índice único ascendente en el campo especificado:

bson_t *keys = BCON_NEW("title", BCON_INT32(1));
bson_t *opts = BCON_NEW("unique", BCON_BOOL(true));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, opts);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
bson_destroy(opts);
mongoc_index_model_destroy(index_model);

El siguiente ejemplo crea un índice comodín ascendente en la colección especificada:

bson_t *keys = BCON_NEW("$**", BCON_INT32(1));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

El siguiente ejemplo crea una nueva colección con un índice clúster ascendente en el campo _id:

bson_t *opts = BCON_NEW("clusteredIndex", "{",
"key", "{",
"_id", BCON_INT32(1),
"}",
"unique", BCON_BOOL(true),
"}");
mongoc_database_t *database = mongoc_client_get_database(client, "<database name>");
if (mongoc_database_create_collection(database, "<collection name>", opts, &error)) {
printf("Successfully created collection\n");
} else {
fprintf(stderr, "Failed to create collection: %s", error.message);
}
mongoc_database_destroy(database);
bson_destroy(opts);

El siguiente ejemplo crea un índice de texto en el campo de string especificado:

bson_t *keys = BCON_NEW("<field name>", BCON_UTF8("text"));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

El siguiente ejemplo borra un índice con el nombre especificado:

if (mongoc_collection_drop_index(collection, "<index name>", &error)) {
printf("Successfully dropped index\n");
} else {
fprintf(stderr, "Failed to drop index: %s", error.message);
}

Para obtener más información sobre cómo remover índices, consulte Remover un índice en la guía Trabajar con índices.

Las siguientes secciones contienen ejemplos de código que describen cómo gestionar los índices de MongoDB Search.

Para obtener más información sobre los índices de búsqueda de MongoDB, consulta la guía Índices de búsqueda de MongoDB.

El siguiente ejemplo crea un índice de búsqueda de MongoDB en el campo especificado:

bson_t cmd;
char *cmd_str = bson_strdup_printf(
BSON_STR({
"createSearchIndexes" : "%s",
"indexes" : [ {"definition" : {"mappings" : {"dynamic" : false}}, "name" : "<index name>"} ]
}),
"<collection name>");
bson_init_from_json(&cmd, cmd_str, -1, &error);
bson_free(cmd_str);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully created search index\n");
} else {
fprintf(stderr, "Failed to create search index: %s", error.message);
}
bson_destroy(&cmd);

Para obtener más información sobre cómo crear índices de búsqueda, consulte la guía Crear un índice de búsqueda.

El siguiente ejemplo imprime una lista de los índices de búsqueda de MongoDB en la colección especificada:

bson_t pipeline;
const bson_t *doc;
const char *pipeline_str = BSON_STR({"pipeline" : [ {"$listSearchIndexes" : {}} ]});
bson_init_from_json(&pipeline, pipeline_str, -1, &error);
mongoc_cursor_t *cursor =
mongoc_collection_aggregate(collection, MONGOC_QUERY_NONE, &pipeline, NULL, NULL);
while (mongoc_cursor_next(cursor, &doc)) {
char *str = bson_as_canonical_extended_json(doc, NULL);
printf("%s\n", str);
bson_free(str);
}
bson_destroy(&pipeline);
mongoc_cursor_destroy(cursor);

Para obtener más información sobre cómo listar índices de búsqueda, consulta la guía Listar índices de búsqueda.

El siguiente ejemplo actualiza un índice existente de MongoDB Search con la nueva definición de índice especificada:

bson_t cmd;
char *cmd_str = bson_strdup_printf(
BSON_STR({
"updateSearchIndex" : "%s",
"definition" : {"mappings" : {"dynamic" : true}}, "name" : "<index name>"}),
"<collection name>");
bson_init_from_json(&cmd, cmd_str, -1, &error);
bson_free(cmd_str);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully updated search index\n");
} else {
fprintf(stderr, "Failed to create search index: %s", error.message);
}
bson_destroy(&cmd);

Para obtener más información sobre la actualización de índices de búsqueda, consulta la guía Actualizar un índice de búsqueda.

El siguiente ejemplo elimina un índice de búsqueda de MongoDB con el nombre especificado:

bson_t cmd;
char *cmd_str = bson_strdup_printf(
BSON_STR({
"dropSearchIndexes" : "%s",
"index" : "<index name>"
}),
"<collection name>");
bson_init_from_json(&cmd, cmd_str, -1, &error);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully deleted search index\n");
} else {
fprintf(stderr, "Failed to delete search index: %s", error.message);
}
bson_destroy(&cmd);

Para obtener más información sobre cómo eliminar índices de búsqueda, consulta la guía Eliminar un índice de búsqueda.

En esta página